﻿var isIE = false;
var isOpera = false;
var isMozilla = false;
var isSafari = false;
var isKonq = false; 

function CheckBrowserVersion()
{
  sUserAgent = navigator.userAgent;
  isOpera = sUserAgent.indexOf("Opera") > -1;
  isIE = sUserAgent.indexOf("compatible") > -1 &&
         sUserAgent.indexOf("MSIE") > -1 &&
         !isOpera;
  isKHTML = sUserAgent.indexOf("KHTML") > -1 &&
            sUserAgent.indexOf("Konqueror") > -1 &&
            sUserAgent.indexOf("AppleWebKit") > -1;
  if (isKHTML)
  {
    isSafari = sUserAgent.indexOf("AppleWebKit") > -1;
    isKonq = sUserAgent.indexOf("Konqueror") > -1;
  }
  isMozilla = sUserAgent.indexOf("Gecko") > -1 &&
              !isKHTML;
}
CheckBrowserVersion();

function attachEventToElement(eventElement, eventName, eventFunction)
{
  if (isIE)
  {        
    eventElement.attachEvent("on" + eventName, eventFunction);
  }
  else
  {
    eventElement.addEventListener(eventName, eventFunction, true);
  }
}

function getDocumentBodyElement()
{
  if (isIE || isMozilla)
  {
    return document.documentElement;
  }
  else if (isOpera)
  {
    return document.body;
  }
  else
  {
    if (document.documentElement)
    {
      return document.documentElement;
    }
    else if (document.body)
    {
      return document.body;
    }
  }
  return null;
}

function getCurrStyle(defObj)
{
  if (defObj)
  {
    if (defObj.currentStyle) 
    {
      return defObj.currentStyle;
    } 
    else if (window.getComputedStyle) 
    {
      return document.defaultView.getComputedStyle(defObj, null);
    }
  }
  return null;
}
function getCurrStyleValue(defObj, IEstyleProp, MozStyleProp) 
{
  if (defObj.currentStyle) 
  {
    return defObj.currentStyle[IEstyleProp];
  } 
  else if (window.getComputedStyle) 
  {
    return document.defaultView.getComputedStyle(defObj, null).getPropertyValue(MozStyleProp);
  }
  return null;
}
function getCurrStyleFloat(defObj)
{
  if (defObj)
  {
    if (defObj.currentStyle) 
    {
      return defObj.currentStyle.styleFloat;
    } 
    else if (window.getComputedStyle) 
    {
      return document.defaultView.getComputedStyle(defObj, null).cssFloat;
    }
  }
  return null;
}
function getStyleFloat(defObj)
{
  if (defObj)
  {
    if (defObj.style.styleFloat || (defObj.style.styleFloat == "")) 
    {
      return defObj.style.styleFloat;
    } 
    else if (defObj.style.cssFloat || (defObj.style.cssFloat == "")) 
    {
      return defObj.style.cssFloat;
    }
  }
  return null;
}
function setStyleFloat(defObj, value)
{
  if (defObj)
  {
    if (defObj.style.styleFloat || (defObj.style.styleFloat == "")) 
    {
      defObj.style.styleFloat = value;
    } 
    else if (defObj.style.cssFloat || (defObj.style.cssFloat == "")) 
    {
      defObj.style.cssFloat = value;
    }
  }
}

function getDimensions(defObj)
{
    if (defObj.style.display != 'none' && defObj.style.display != null) // Safari bug
        return { width: defObj.offsetWidth, height: defObj.offsetHeight };

    return { width: defObj.clientWidth, height: defObj.clientHeight };
}

function YesNoCancelMsgBox(question)
{
  if (isIE || window.VBYesNoCancelMsgBox)
  {
    return VBYesNoCancelMsgBox(question);
  }
  else
  {
    return confirm(question) ? 6 : 7;
  }
}

function YesNoMsgBox(question)
{
  if (isIE || window.VBYesNoMsgBox)
  {
    return VBYesNoMsgBox(question);
  }
  else
  {
    return confirm(question) ? 6 : 7;
  }
}

function YesNoWarrningMsgBox(question)
{
  if (isIE || window.VBYesNoWarrningMsgBox)
  {
    return VBYesNoWarrningMsgBox(question);
  }
  else
  {
    return confirm(question) ? 6 : 7;
  }
}

function OKInformationMsgBox(infoText)
{
  if (isIE || window.VBOKInformationMsgBox)
  {
    VBOKInformationMsgBox(infoText);
    
  }
  else
  {
    alert(infoText);
  }
}

function OKExclamationMsgBox(infoText)
{
  if (isIE || window.VBOKExclamationMsgBox)
  {
    VBOKExclamationMsgBox(infoText);
    
  }
  else
  {
    alert(infoText);
  }
}

function isLeftButtonClick(ev)
{
  if (isIE)
  {
    return ev.button == 1;
  }
  else
  {
    return ev.button == 0;
  }
}

function isRightButtonClick(ev)
{
  return ev.button == 2;
}

function GetRelativePath(path, applicationPath)
{
  pathname = location.pathname+location.search 
  prefix = location.href.substr(0, location.href.length - pathname.length) + applicationPath;  
  if (path.indexOf(prefix) >= 0)
  {
    return "~" + path.substr(prefix.length, path.length - prefix.length);
  }
  else
  {
    return path;
  }
}
function RefreshLabel4Disable(controlID, isFormDisabled)
{
  // its necessary to refresh label because on show property page
  // (disable current page) label duplicate text
  control = document.getElementById(controlID);
  if (control)
  {
    if (isFormDisabled)
    {
      control.style.visibility = 'visible';    
    }
    else
    {
      control.style.visibility = '';    
    }
  }
}

function SetSelectControlsVisible(parentControl, value)
{
    // value - 'hidden', 'visible'
	for( var i = 0; i < parentControl.childNodes.length; i++) 
	{
	   if (parentControl.childNodes[i].tagName && 
	       (parentControl.childNodes[i].tagName.toLowerCase() == 'select'))
	   {
         parentControl.childNodes[i].style.visibility = value;
	   }
	   SetSelectControlsVisible(parentControl.childNodes[i], value);
	}
}
function HideSelectControls(parentControlID)
{
    parentControl = document.getElementById(parentControlID);
    if (parentControl)
    {
      SetSelectControlsVisible(parentControl, 'hidden');
    }
}
function ShowSelectControls(parentControlID)
{
    parentControl = document.getElementById(parentControlID);
    if (parentControl)
    {
      SetSelectControlsVisible(parentControl, 'visible');
    }
}

function ConvertStringToBool(strValue)
{
  if (strValue && (strValue == 't'))
  {
    return true;
  }
  else
  {
    return false;
  }
}

function setDiabledAllElements(parentElement, isDisabled)
{
  if ((parentElement.disabled != null) &&
      (parentElement.disabled != undefined))
  {
    parentElement.disabled = isDisabled;
  }
  if (parentElement.childNodes)
  {
    for(var i = 0; i < parentElement.childNodes.length; i++) 
    {    
      setDiabledAllElements(parentElement.childNodes[i], isDisabled)
    }
  }
}

function CountLeftChars(textBox, infoLabelID)
{
    var infoLabel = document.getElementById(infoLabelID);

    if ((textBox == null) || (infoLabel == null))
        return;

    var maxChars = getMaxCount(textBox);
    var leftChars = maxChars - textBox.value.length;
    if (leftChars > 0)
    {
        infoLabel.className = 'AddCMSSysPropertyLeftInfoLabel';
    }
    else
    {
        infoLabel.className = 'AddCMSSysPropertyToLongInfoLabel';
        leftChars = 0;
    }
    infoLabel.innerHTML = GetResourceText('PropertyInfoCharsLeft', leftChars);
}

function CountLeftWords(textBox, infoLabelID)
{
    var infoLabel = document.getElementById(infoLabelID);

    if ((textBox == null) || (infoLabel == null))
        return;

    var wordsCount = 0;
    if (textBox.value.length > 0)
    {
        var wordsArr = textBox.value.split(', ');
        wordsCount = textBox.value.split(', ').length;
    }

    var maxWords = getMaxCount(textBox);
    var leftWords = maxWords - wordsCount;
    if (leftWords > 0)
    {
        infoLabel.className = 'AddCMSSysPropertyLeftInfoLabel';
    }
    else
    {
        infoLabel.className = 'AddCMSSysPropertyToLongInfoLabel';
        leftWords = 0;
    }
    infoLabel.innerHTML = GetResourceText('PropertyInfoWordsLeft', leftWords);
}

function getMaxCount(textBox)
{
    var maxWordsStr = textBox.getAttribute('maxCount');
    if (maxWordsStr)
        return parseInt(maxWordsStr);
    else
        return 10;
}


// functions for priority drop downs

function isControlVisible(control)
{
    if (control.style.display == 'none')
        return false;
    else
        return true;
}

function setControlVisible(control, visible)
{
    control.style.display = visible ? 'block' : 'none';
}

function priorityDropDownChange(dropDown, textBoxID)
{
    var textBox = document.getElementById(textBoxID);
    if (dropDown && textBox)
        setPriorityTextBoxVisible(textBox, dropDown);
}

function setPriorityTextBoxVisible(textBox, dropDown)
{
    if (!textBox || !dropDown)
        return;

    if ((dropDown.selectedIndex >= 0)
        && ((dropDown.options[dropDown.selectedIndex].value.toLowerCase() == 'user')
            || (dropDown.options[dropDown.selectedIndex].value.toLowerCase() == '-2')))
    {
        setControlVisible(textBox, true);
    }
    else
    {
        if (dropDown.selectedIndex >= 0)
            textBox.value = dropDown.options[dropDown.selectedIndex].text;
        else
            textBox.value = '';
        setControlVisible(textBox, false);
    }
}

function CE_DropDownAddPageLink(control)
{
    var vEditor = CuteEditor_GetEditor(control);
    vEditor.ExecCommand('UnLink');
    CuteEditor_DropDownCommand(control, 'InsertLink');
}

// ***** IDENTIFIER AUTOFILL
function getCheckBox(sender)
{
    var innerCheck = null;
    if (sender.tagName.toLowerCase() == 'input')
    {
        innerCheck = sender;
    }
    else
    {
        var innerChecksArr = sender.getElementsByTagName('input');
        if (innerChecksArr != null && innerChecksArr.length > 0)
            innerCheck = innerChecksArr[0];
    }
    return innerCheck;
}
function IdentifierAutofillCheckbox_Change(sender, preventChange, identTextBoxID, nameTextBoxID)
{
    if (sender == null)
        return;

    var innerCheck = getCheckBox(sender);
    if (!innerCheck)
        return;

    var identifierTextBox = document.getElementById(identTextBoxID);
    var nameTextBox = document.getElementById(nameTextBoxID);

    if (identifierTextBox)
    {
        identifierTextBox.disabled = innerCheck.checked;
    }

    if (innerCheck.checked && !preventChange)
    {
        rewriteIdentifierAutofill(identifierTextBox, nameTextBox);
    }
}
function NameTextBox_Change(checkBoxID, identTextBoxID, nameTextBoxID)
{
    var innerCheck = getCheckBox(document.getElementById(checkBoxID));

    if (!innerCheck || !innerCheck.checked)
        return;

    var identifierTextBox = document.getElementById(identTextBoxID);
    var nameTextBox = document.getElementById(nameTextBoxID);
    rewriteIdentifierAutofill(identifierTextBox, nameTextBox);
}
function rewriteIdentifierAutofill(identifierTextBox, nameTextBox)
{
    if (nameTextBox && identifierTextBox)
    {
        var str = nameTextBox.value || '';
        //        var regEx = /\s+/g;
        //        str = str.replace(regEx, '-');
        identifierTextBox.value = getUrlAutofill(str);
    }
}

function getUrlAutofill(value)
{
    if (value)
    {
        var regEx = /\s+/g;
        value = value.replace(regEx, '-');
        // remove special chars
        value = value.replace(/\?+/g, '');
        value = value.replace(/\&+/g, '');
        value = value.replace(/\#+/g, '');
        value = value.replace(/\*+/g, '');
        value = value.replace(/\\+/g, '');
        value = value.replace(/\/+/g, '');
        value = value.replace(/\:+/g, '');
        value = value.replace(/\<+/g, '');
        value = value.replace(/\>+/g, '');
        value = value.replace(/\|+/g, '');
        value = value.replace(/\++/g, '');
        value = value.replace(/\%+/g, '');
        value = value.replace(/\"+/g, ''); 
        return value;
    }
    return '';
}
// ***** IDENTIFIER AUTOFILL

function CMSOverlayLabel(inputControlClientID, labelControlClientID)
{
    this.inputControl = document.getElementById(inputControlClientID);
    this.labelControl = document.getElementById(labelControlClientID);

    this.hideLabel = function(event)
    {
        event = event || window.event;
        var eventTarget = event.target || event.srcElement;
        if (!eventTarget || !eventTarget.overlayObject) return;

        eventTarget.overlayObject.labelControl.style.display = 'none';
        eventTarget.overlayObject.inputControl.focus();
    };

    this.showLabel = function(event)
    {
        event = event || window.event;
        var eventTarget = event.target || event.srcElement;
        if (!eventTarget || !eventTarget.overlayObject) return;

        if (eventTarget.overlayObject.inputControl.value.length <= '0')
        {
            eventTarget.overlayObject.labelControl.style.display = '';
        }
    };

    ///////////////////////////////////////////////////////////////////////////////////
    // Initialization
    this.Init = function()
    {
        if (!this.labelControl || !this.inputControl) return;

        this.labelControl.overlayObject = this;
        this.inputControl.overlayObject = this;

        var imputControlDim = getDimensions(this.inputControl);
        this.labelControl.style.height = imputControlDim.height + 'px';
        this.labelControl.style.width = imputControlDim.width + 'px';
        this.labelControl.style.position = 'absolute';
        /*imputControlDim.height = 0 in calendar.aspx*/
        //this.labelControl.style.lineHeight = imputControlDim.height + 'px';
        //this.labelControl.style.textAlign = 'center';

        if ((this.inputControl.disabled == null) || (this.inputControl.disabled == undefined) ||
            !this.inputControl.disabled)
        {
            attachEventToElement(this.labelControl, 'click', this.hideLabel);
            attachEventToElement(this.inputControl, 'focus', this.hideLabel);
            attachEventToElement(this.inputControl, 'blur', this.showLabel);
        }

        if (this.inputControl.value.length <= '0')
        {
            this.labelControl.style.display = '';
        }
        else
        {
            this.labelControl.style.display = 'none';
        }
    }
    this.Init();
}

function FormatDate(date, separator)
{
    var dayString = "00" + date.getDate();
    var monthString = "00" + (date.getMonth() + 1);
    
    dayString = dayString.substring(dayString.length - 2);
    monthString = monthString.substring(monthString.length - 2);
    
    return date.getFullYear() + separator + monthString + separator + dayString;
}

