﻿//----------------------------------------------------------
// Copyright (C) Textrix Solutions Inc. 2008
//----------------------------------------------------------
// WebStudio.js

/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />

function $_$(){var elements=new Array();for(var i=0; i<arguments.length; i++){var element=arguments[i];if(typeof element=='string'){element=document.getElementById(element);}if(arguments.length==1){return element;}elements.push(element);}return elements;}
function getElementPosition(element){element=$_$(element);var bounds = Sys.UI.DomElement.getBounds(element);return bounds;}
function getElementDimensions(element){if(typeof(element) == "string"){element = document.getElementById(element);}if(!element || !element.offsetParent) return false;var left = element.offsetLeft, top = element.offsetTop, width = element.offsetWidth, height = element.offsetHeight;do{element = element.offsetParent, left+= element.offsetLeft, top+= element.offsetTop;}while (element.offsetParent);return {"left" : left, "right" : left + width, "top" : top, "bottom" : top + height, "width" : width, "height" : height};}
function getHeight(element){element=$_$(element);var bounds = Sys.UI.DomElement.getBounds(element);return bounds.height;}
function getWidth(element){element=$_$(element);var bounds = Sys.UI.DomElement.getBounds(element);return bounds.width;}
function getElementHeight(element){return getHeight(element);}
function getElementWidth(element){return getWidth(element);}
function getElementSize(element){element=$_$(element);var bounds = Sys.UI.DomElement.getBounds(element);return bounds;}
function setElementOpacity(element, opacity) { element = $_$(element); element.style.opacity = (opacity / 100); element.style.MozOpacity = (opacity / 100); element.style.KhtmlOpacity = (opacity / 100); element.style.filter = "alpha(opacity=" + opacity + ")"; }
function replaceHtml(element, html) { element = $_$(element); var sibling = element.nextSibling; var parent = element.parentNode; parent.removeChild(element); element.innerHTML = ""; element.innerHTML = html; if (sibling){parent.insertBefore(element, sibling);}else{parent.appendChild(element);} }
function resolveClientUrl(url) { var newUrl = null; url = url.replace(/\\/ig, "/"); if (url.substring(0,2) == "~/") { url = url.replace("~", ""); if (location.hostname == "localhost"){ var parts = location.pathname.split("/"); newUrl = "/" + parts[1] + url; }else{ newUrl = url; } }else{ newUrl = url; } return newUrl; }
function toggleElement(element){element=$_$(element);element.style.display=(element.style.display=='none'?'block':'none');return element;}
function hideElement(element){$_$(element).style.display='none';return element;}
function showElement(element){$_$(element).style.display='block';return element;}
function getElementsByClassName(className, node, tag){var returnElements = []; var elements; if (tag == null) tag = '*'; if (node == null) { elements = document.all || document.getElementsByTagName(tag); } else { elements = node.getElementsByTagName(tag); } className = className.replace(/\-/g, '\\-'); var pattern = new RegExp('(^|\\s)' + className + '(\\s|$)'); var element; for (var i = 0; i < elements.length; i++) { element = elements[i]; if (pattern.test(element.className)) { returnElements.push(element); } } return returnElements; }
function $$(className, node, tag){var returnElements = []; var elements; if (tag == null) tag = '*'; if (node == null) { elements = document.all || document.getElementsByTagName(tag); } else { elements = node.getElementsByTagName(tag); } className = className.replace(/\-/g, '\\-'); var pattern = new RegExp('(^|\\s)' + className + '(\\s|$)'); var element; for (var i = 0; i < elements.length; i++) { element = elements[i]; if (pattern.test(element.className)) { returnElements.push(element); } } return returnElements; }
function getDocumentSize(win){var dimensions={width:0,height:0};if(!win){win=self;}dimensions.width=win['innerWidth'] || (win.document.documentElement['clientWidth'] || win.document.body['clientWidth']);dimensions.height=win['innerHeight'] || (win.document.documentElement['clientHeight'] || win.document.body['clientHeight']);return dimensions;}
function getDocumentWidth(){return getDocumentDimensions().width;}
function getDocumentHeight(){return getDocumentDimensions().height;}
function getPageScroll(win){var pageScroll={x:0, y:0};if(!win){win=window;}if(win.innerHeight && win.scrollMaxY){pageScroll.x=win.document.body.scrollWidth;pageScroll.y=win.innerHeight + win.scrollMaxY;}else if(win.document.body.scrollHeight > win.document.body.offsetHeight){pageScroll.x=win.document.body.scrollWidth;pageScroll.y=win.document.body.scrollHeight;}else{pageScroll.x=win.document.body.offsetWidth;pageScroll.y=win.document.body.offsetHeight;}return pageScroll;}
function getPageSize(){ var pageSize = {pageWidth:0, pageHeight:0, windowWidth:0, windowHeight:0}; var pageScroll = getPageScroll(); if (self.innerHeight) { pageSize.windowWidth = self.innerWidth; pageSize.windowHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { pageSize.windowWidth = document.documentElement.clientWidth; pageSize.windowHeight = document.documentElement.clientHeight; } else if (document.body) { pageSize.windowWidth = document.body.clientWidth; pageSize.windowHeight = document.body.clientHeight; } if (pageScroll.y < pageSize.windowHeight) { pageSize.pageHeight = pageSize.windowHeight; } else { pageSize.pageHeight = pageScroll.y } if (pageScroll.x < pageSize.windowWidth) { pageSize.pageWidth = pageSize.windowWidth; } else { pageSize.pageWidth = pageScroll.x; } return pageSize; }
function setElementStyle(element, styles){ element = $_$(element); var elementStyle = element.style, match; if (typeof styles == "string"){ element.style.cssText += ';' + styles;}for (var property in styles){if (property == 'opacity'){element.setOpacity(styles[property]); }else{ elementStyle[(property == 'float' || property == 'cssFloat') ? (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') : property] = styles[property];}} return element;}

//----------------------------------------------------------
// IE 6 PNG Image Correction
//----------------------------------------------------------
function InitPNGCorrection(){
    if((Sys.Browser.agent == Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)){
        for(var i=0; i<document.images.length; i++){
            var img = document.images[i];
            //var imgName = img.src.toUpperCase();
            //if(imgName.substring(imgName.length-3, imgName.length) == 'PNG'){
            if (img.src.match(/\.png/i) !== null) {
                var imgID = (img.id) ? "id='" + img.id + "' " : "";
                var imgClass = (img.className) ? "class='" + img.className + "' " : "";
                var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
                var imgStyle = "display:inline-block;" + img.style.cssText; 
                if (img.align == "left") imgStyle = "float:left;" + imgStyle;
                if (img.align == "right") imgStyle = "float:right;" + imgStyle;
                if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle;
                var strNewHTML = "<span " + imgID + imgClass + imgTitle
                    + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
                    + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
                    + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
        
                img.outerHTML = strNewHTML;
                i--;
            }
        }
    } 
}


//----------------------------------------------------------
// Ajax Error Handling
//----------------------------------------------------------
var errDivId='err';
function InitAjaxErrorHandling(){
//    var err=$(errDivId);
//    if(!err){
//        err=document.createElement('div');
//        err.id=errDivId; 
//        setElementStyle(err,{'display':'none','padding':'20px','margin':'10px','color':'red','backgroundColor':'#ffffe1','border':'solid 1px #646464'})
//        document.appendChild(err); 
//    }
//    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginAjaxRequest);
//    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndAjaxRequest);
}
//function BeginAjaxRequest(sender, e){
//    var err=$(errDivId);
//    if(err.style.display == 'block'){
//        err.innerText='';
//        err.style.display='none'; 
//    }
//}
//function EndAjaxRequest(sender, e){
//    var err=$(errDivId);
//    if(e.get_error() != undefined && e.get_error().httpStatusCode == '500'){
//        err.style.display = 'block';
//        err.innerText = e.get_error().message + ' --- ' + e.get_error().description;
//        e.set_errorHandled(true);
//    }
//}

//----------------------------------------------------------
// Image Web Part Rollover Behavior
//----------------------------------------------------------
function InitImageRollovers(){
    var imgs=getElementsByClassName('imageRollover', document, 'img');
    for(var i=0;i<imgs.length;i++){
        var img=imgs[i];
        $addHandlers(img, {mouseover:handleImageMouseOver,mouseout:handleImageMouseOut});
    }
}
function handleImageMouseOver(e){
    if(e.target){
        var img=$_$(e.target);
        var suffix=img.src.substring(img.src.lastIndexOf('.'));
        var prefix=img.src.slice(0, img.src.length - suffix.length);
        img.src=prefix+"_on"+suffix;   
    }    
}
function handleImageMouseOut(e){
    if(e.target){
        var img=$_$(e.target);
        img.src=img.src.replace('_on', ''); 
    }
}

//----------------------------------------------------------
// Textbox Watermark
//----------------------------------------------------------
function handleWatermark(e){
    if(e.target)
        doWatermark(e.target);
}
function doWatermark(element){
    element=$_$(element);
    if(element.value==element.watermarkText){
        element.value='';
        if(element.cssClassOriginal!=null){
            element.className=element.cssClassOriginal;
        } 
    }else if(element.value==''){
        element.value=element.watermarkText;
        if(element.cssClass!=null){
            element.className=element.cssClass;
        }
    }
}
function initWaterMark(element, watermarkText, cssClass){
    element=$_$(element);    
    element.watermarkText=watermarkText;
   
    if((cssClass!='' || cssClass!=null) && (element.className!='' || element.className!=null)){
        element.cssClassOriginal=element.className; 
        element.cssClass=cssClass;
    }  
    
    $addHandlers(element, {focus:handleWatermark,blur:handleWatermark});
    doWatermark(element);
}

//----------------------------------------------------------
// Content Area Web Part
//----------------------------------------------------------
var editorMinHeight=200;
var editorMaxHeight=800;
function FCKeditor_ResizeToContent(instance) {
    var wrap = $_$(instance.Name).parentNode;

    if (wrap && wrap.className == 'resizedEditor'){
        try{
            var editorHeight = getDocumentSize(instance.EditorWindow).height;
            var contentHeight =  getPageScroll(instance.EditorWindow).y + 10;
            var heightDiff = contentHeight - editorHeight;

            if((heightDiff < 0) && (editorHeight > editorMinHeight)){
                editorHeight = contentHeight;
                if(editorHeight < editorMinHeight){editorHeight = editorMinHeight;}
                instance.EditorWindow.parent.frameElement.style.height = editorHeight;  
            }else if((heightDiff > 0) && (editorHeight < editorMaxHeight)){
                editorHeight = contentHeight;
                if(editorHeight > editorMaxHeight){editorHeight = editorMaxHeight;}
                instance.EditorWindow.parent.frameElement.style.height = editorHeight;
            }
        }catch(err){}
    } 
}
function FCKeditor_UpdateLinkedField(id){
    try{ 
        if(typeof(FCKeditorAPI) == 'object'){
            FCKeditorAPI.GetInstance(id).UpdateLinkedField();
        }
    }catch(err){}
}
function FCKeditor_EscapeValue(editor){
    editor.LinkedField.value=escape(editor.LinkedField.value);
}
function FCKeditor_OnComplete(instance){
    FCKeditor_ResizeToContent(instance);
    instance.Events.AttachEvent('OnAfterLinkedFieldUpdate',FCKeditor_EscapeValue);
    instance.Focus();
}

//----------------------------------------------------------
// Element Backgroud Fade
// Usage:
//      <div
//          onmouseover="fadeElementColorMem(this,[255,255,255],[249,199,224],4,20,1);"
//          onmouseout="fadeElementColorMem(this,[249,199,224],[255,255,255],4,20,1);">
//      </div>
//----------------------------------------------------------
function fadeElementColor(element, startRGB, endRGB, finalColor, steps, intervals){
    element=$_$(element);
	if(element.bgFadeInt) window.clearInterval(element.bgFadeInt);
	var actStep=0;
	element.bgFadeInt=window.setInterval(
        function(){
            element.style.backgroundColor = "rgb("+
				easeInOut(startRGB[0],endRGB[0],steps,actStep,1)+","+
				easeInOut(startRGB[1],endRGB[1],steps,actStep,1)+","+
				easeInOut(startRGB[2],endRGB[2],steps,actStep,1)+")";
			actStep++;
			if(actStep>steps){
			    element.style.backgroundColor=finalColor;
			    window.clearInterval(element.bgFadeInt);
			}
		}
		,intervals)
}
function fadeElementColorMem(element, startRGB, endRGB, steps, intervals) {
    element=$_$(element);
	if(element.bgFadeMemInt) window.clearInterval(element.bgFadeMemInt);
	var actStep = 0;
	element.bgFadeMemInt=window.setInterval(
		function() {
			element.currentbgRGB = [
				easeInOut(startRGB[0],endRGB[0],steps,actStep,1),
				easeInOut(startRGB[1],endRGB[1],steps,actStep,1),
				easeInOut(startRGB[2],endRGB[2],steps,actStep,1)
				];
			element.style.backgroundColor = "rgb("+
				element.currentbgRGB[0]+","+
				element.currentbgRGB[1]+","+
				element.currentbgRGB[2]+")";
			actStep++;
			if(actStep>steps) window.clearInterval(element.bgFadeMemInt);
		}
		,intervals)
}
function easeInOut(min, max, steps, actualStep, powr){
    var delta = max-min;
    var step = min+(Math.pow(((1/steps)*actualStep),powr)*delta);
    return Math.ceil(step)
}


//----------------------------------------------------------
// WebStudio Page Menubar
//----------------------------------------------------------
var __wrapper='wrapper';
var __wrapperMargin='32';
function InitWebStudioPageMenuBar(){    
    __wrapper = $_$(__wrapper);
    if(__wrapper){
        __wrapperMargin = __wrapperMargin.replace('px','');
        __wrapper.style.marginTop = __wrapperMargin + 'px';
        //__wrapper.style.borderTop = 'solid 1' + __wrapperMargin + 'px #ffffff';
    }
}
var catalogPostBackRef;
function showCatalogDialog(ref){
    catalogPostBackRef = ref;

    var modalPopupBehavior = $find('webPartCatalogModal');
    modalPopupBehavior.show();
}
function addWebPart(typeName){
    eval(catalogPostBackRef.replace('[[WEBPART]]', typeName));
}
function toggleEditorZonePart(id){
    var img = $_$(id+'_img');
    var element = $_$(id+'_body');
    if(toggleElement(element).style.display == 'none'){
        img.src = img.src.replace('minus','plus');
    }else{
        img.src = img.src.replace('plus','minus');
    }
}

//----------------------------------------------------------
// Character Count
//----------------------------------------------------------
function InitCharacterCounter(element, max){
    element=$_$(element);
    if(element && (max != null && max >= 1)){
        // Set the max characters allowed.
        element.maxCharacters=max;
       
        // Create the status element(s).
        var div=document.createElement('div');
        div.id=element.id+'_status';
        div.className='maxCharacterStatus';
        SetCharacterCountStatus(div, max - element.value.length, max);
        HandleCharacterCount(element);
        element.parentNode.appendChild(div);

        // Add the handler(s).
        $addHandlers(element, {keydown:HandleCharacterCount, keyup:HandleCharacterCount});

        HandleCharacterCount(element);

    }        
}
function HandleCharacterCount(e){
    if(e.target){
        var element=e.target;
        if(element.maxCharacters == null)
            return;
                       
        var maxCharacters=parseFloat(element.maxCharacters);
        if((isNaN(maxCharacters) == true) || (maxCharacters <= 0))
            return;
          
        var charCount=element.value.length;
        if(charCount > maxCharacters){
            element.value=element.value.substring(0,maxCharacters);
        }else{
            SetCharacterCountStatus(element.id+'_status', maxCharacters - element.value.length, maxCharacters);
        }
    }
}
function SetCharacterCountStatus(element, count, max){
    element=$_$(element);
    if(element)
        element.innerHTML='Please limit your text to ' + max + ' characters.<br />You have ' + count + ' characters left.';
}  
//----------------------------------------------------------
// Ellipsis
//----------------------------------------------------------
function applyEllipsis(element){
//    var w = getWidth(element) - 10000;
//    var t = element.innerHTML;
//    element.innerHTML = '<span>' + t + '</span>';
//    element = element.firstChild;
//    while (t.length > 0 && getWidth(element) >= w) {
//        t = t.substr(0, t.length - 1);
//        element.innerHTML = t + '...';
//    }
    var h = getHeight(element);
    var t = element.innerHTML;
    element.innerHTML = '<span title="' + t + '">' + t + '</span>';
    element = element.firstChild;
    while (t.length > 0 && getHeight(element) >= h) {
        t = t.substr(0, t.length - 1);
        element.innerHTML = t + '...';
    }    
}
function InitEllipsis(){
    var elements = $$('ellipsis');    
    if (elements.length > 0 ){
        for(var i=0; i<elements.length; i++){
            applyEllipsis(elements[i]);
        }
   }
}
//----------------------------------------------------------
// Application Load
//----------------------------------------------------------
Sys.Application.add_load(InitPNGCorrection);
Sys.Application.add_load(InitEllipsis);
//----------------------------------------------------------
// Application Unload
//----------------------------------------------------------
//Sys.Application.add_unload(InitPNGCorrection);
//Sys.Application.add_unload(InitAjaxErrorHandling);
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();