﻿function jsonp(url,name, query)
{                
    if (url.indexOf("?") > -1)
        url += "&callback=" 
    else
        url += "?callback=" 
    url += name + "&";
    if (query)
        url += encodeURIComponent(query) + "&";   
    url += new Date().getTime().toString(); // prevent caching        
    
    var script = document.createElement("script");        
    script.setAttribute("src",url);
    script.setAttribute("type","text/javascript");
    document.getElementsByTagName('head')[0].appendChild(script);
}

//create an xml object according to the
//browser type.
function GetXmlHttpObject(handler)
{ 
    var objXMLHttp=null;
    if (window.XMLHttpRequest)
    {
        objXMLHttp=new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
        objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    return objXMLHttp;
}

function UpdateSiteApplication(sitePath,parameter)
{
    jsonp(sitePath + 'Handlers/CommonHandler.ashx?function=UpdateApplication', 'UpdateApplicationSucceeded', "");
}

function UpdateApplicationSucceeded(json)
{   
    var spanMessage = document.getElementById("divMessage");
    
    if(json.success)
    {
        spanMessage.innerHTML = json.message;
        spanMessage.style.color = 'blue';
    }
    else
    {
        spanMessage.innerHTML = json.message;
        spanMessage.style.color = 'red';
    }
}
function UpdateApplicationFailed()
{    
    spanMessage.innerHTML = "UpdateDataFailed";
    spanMessage.style.color = 'red';
}       

function RunAJAXRequest(url, objAJAX, handler)
{
    //if unsuccessful - alert user
   if (objAJAX==null)
   {
       alert ("Browser does not support XmlHttp Request");
       return;
   } 
   
   //set the url for the request and assign a handler
   objAJAX.onreadystatechange=handler;
   objAJAX.open("GET",url,true);
   setTimeout(function () { objAJAX.send(null); }, 1);
   
}

function RunAJAXRequestPOST(url, objAJAX, handler, parameters)
{
    //if unsuccessful - alert user
   if (objAJAX==null)
   {
       alert ("Browser does not support XmlHttp Request");
       return;
   } 
   
   //set the url for the request and assign a handler
   objAJAX.onreadystatechange=handler;
   objAJAX.open("POST",url,true);   
   objAJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   objAJAX.setRequestHeader("Content-length", parameters.length);
   objAJAX.setRequestHeader("Connection", "close");
   setTimeout(function () { objAJAX.send(parameters); }, 1);
}

// function that return params from Querystring
function getQuerystring(key, default_)
{
  if (default_==null) default_="";
  key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
  var qs = regex.exec(window.location.href);
  if(qs == null)
    return default_;
  else
    return qs[1];
}

/******* handle input controls - get data from the controls ******/

function GetDDLItemIndexByVal(id, val)
{
	var ddl = document.getElementById(id)
    
    if (ddl != null)
	{
		for (var i = 0; i < ddl.options.length; i++)
        {
        	if (ddl.options[i].value == val)
            {
				return i;				
            }            
		}
	}
	return -1;	
}

function GetDDText(name){
	var result = '';
	
	try {
		if (document.getElementById(name) != null)
		{
			result = document.getElementById(name).options[document.getElementById(name).selectedIndex].text;
		}
	} catch (ex) {}
	
	return Trim(result);
}

function GetTBText(name){
	var result = '';
	
	try {
		if (document.getElementById(name) != null)
		{
			result = document.getElementById(name).value;
		}
	} catch (ex) {}
		
	return Trim(result);
}

function SetTBText(name,value)
{	
	try 
	{
		if (document.getElementById(name) != null)
		{
			document.getElementById(name).value = value;
		}
	} catch (ex) {}
}

function GetChkBox(id){
    var result =null;
    
    try{
    
    var obj = document.getElementById(id);
        if(obj != null)
        {
            result = obj.checked;
        }
    } catch (ex) {}
    return result

}
function GetSpanText(name){
	var result = '';
	
	try {
		if (document.getElementById(name) != null)
		{
			result = document.getElementById(name).innerHTML;
		}
	} catch (ex) {}
		
	return Trim(result);
}

function SetSpanText(name,value)
{	
	try 
	{
		if (document.getElementById(name) != null)
		{
			document.getElementById(name).innerText = value;
		}
	} catch (ex) {}		
}

function GetDDVal(name){
	var result = (-1);
	
	try {
		if (document.getElementById(name) != null)
		{
			result = document.getElementById(name).options[document.getElementById(name).selectedIndex].value;
		}
	} catch (ex) {}
	
	return result;
}

//get value of selected radio button group 
function GetRadioGroupValue(radioGroupID){
	var result = (-1);
	try {
	    var group = document.getElementById(radioGroupID);
		if (group != null)
		{
		    var buttons = group.getElementsByTagName ('input');
            if (buttons != null) {
                for (var i = 0; i < buttons.length; ++i) {
                if (buttons[i].type == 'radio' && buttons[i].checked )
                    result = buttons[i].value ;
                }
            }
		}
	} catch (ex) {}
	return result;
}

//get index of selected radio button group 
function GetRadioGroupIndex(radioGroupID){
	var result = (-1);
	try {
	    var group = document.getElementById(radioGroupID);
		if (group != null)
		{
		    var buttons = group.getElementsByTagName ('input');
            if (buttons != null) {
                for (var i = 0; i < buttons.length; ++i) {
                if (buttons[i].type == 'radio' && buttons[i].checked )
                    result = i ;
                }
            }
		}
	} catch (ex) {}
	return result;
}
//get radio-buttons collection and return index of selected radio-button
function getRadioGroupIndex(radioGroup) {

	for (var i = 0; i < radioGroup.length; i++) {
		if (radioGroup[i].checked)
			return i;
	}
}

/************ string functions **************/
// Removes leading whitespaces
function LTrim( value ) {	
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");	
}

// Removes ending whitespaces
function RTrim( value ) {	
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");	
}

// Removes leading and ending whitespaces
function Trim( value ) {
	var result = value.trim();
	result = result.replace(',',' ');
	result = result.replace(';',' ');
	return LTrim(RTrim(value));	
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); };

function GoToUrL(url, isFrame){
    if (isFrame)
        parent.document.location.href = parent.document.location.href;
    else
        document.location.href = url;
    
    return false;
}

function LoadIframe(frame,url)
{
    var obj = document.getElementById(frame);
    if(obj != null)
    {
        obj.src = url;
    }    
}

function SetIframeSize(frame, width, height)
{
    var obj = document.getElementById(frame);
    if(obj != null)
    {
        obj.height = height;
        obj.width = width;
    }    
}

function validateCB(oSrc, args) 
{
    args.IsValid = document.all["chkTerms"].checked;
}

function IsIntegerNumber(sText)
{
   var ValidChars = "0123456789";
   var flag=true;
   var Char; 
   for (i = 0; i < sText.length && flag == true; i++) 
   { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
      {
         flag = false;
      }
   }
   return flag;   
}

//replace \' in '
function removeBackslashFromApostrophe(raw)
{        
    return raw.replace(/\\'/g, "'");
}

//decode special chars
function decodeHTML(str)
{
   //innerText don't replace the 3 next chars
   str = str.replace(/&amp;/g , "&");       
   str = str.replace(/&gt;/g , ">");    
   str = str.replace(/&lt;/g , "<");       

   var div = document.createElement('div');   
   div.innerText = str;           
   return div.innerText;
  };

  function ecodeHTML(str) {
  	//innerText don't replace the 3 next chars
  	str = str.replace(/&/g,"&amp;");
  	str = str.replace(/>/g,"&gt;");
  	str = str.replace(/</g,"&lt;");

  	return str;
  };

// for now no need to use this func, if you think you should talk to Hanan
function escapeJson(s)
{ 
    return s.replace(/\\/g, '\\\\').replace(/"/g, '\"').replace(/\n/g, '\n'); 
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

WrapTextByContainer = function(container, element, maxChar)
{
    if (!$(container))
        return;
        
    var collection = $(container).getElementsByTagName(element);

    if (collection)
    {
        for (var ind=0; ind < collection.length ; ind++)
        {
              wrapTextOfOneLine(collection[ind], maxChar);
        }
    }       
}

function wrapTextOfOneLine(controlID, maxChars, callStack)
{
    try
    {    
        var control = $(controlID);

        if(control != null)    
        {
            var temp = "";
            if(document.all)
                temp = control.innerText;
            else
                temp = control.textContent;
            textToWrap = unescape(temp);
            
            if(textToWrap.length > maxChars)
            {
                control.title = textToWrap;
            
                textToWrap = textToWrap.substring(0, maxChars - 3) + "...";                
                
                control.innerHTML = textToWrap;                
            }        
        }
    }        
    catch(err)
    {
        writeException(err, callStack + ': exception from wrapTextOfOneLine('+controlID+')');
    }        
}

function writeException(err, exceptionSource)
{
    this.http = new Request({
            method: 'post',                
            url: 'Handlers/ExceptionsHandler.ashx',
            data: 'errorDescription='+exceptionSource+' exception from JS: ' + 'Error name: ' + err.name + ". Error message: " + err.message
        }).send();          
                
}

//Wrap text only in client size and set title if needed.
//Not wrap text in "view source" (SEO need all the text).
function wrapText(controlID, maxCharsInLine, maxLines)
{
    var control = $(controlID);

    if(control != null)    
    {
        textToWrap = control.innerHTML;
        
        var result = '';
        var i = 0;
        var regExp = new RegExp("(.{1,"+maxCharsInLine+"})( +|$\n?)|(.{1,"+maxCharsInLine+"})", "g");
        var match;
        var isWraped = false;

        var matchCount = 0;
        //count num of matches
        while ((match = regExp.exec(textToWrap)) != null)
        {
            matchCount++;
        }
                
        while ((match = regExp.exec(textToWrap)) != null)
        {
            if (i == maxLines - 1) //last line                   
            {
                var line = Trim(match[0]);   
                
                var lineLength = line.length;            
                    
                if(matchCount > i+1)
                {
                    if (lineLength > maxCharsInLine - 3)
                    {
                        line = line.substring(0, maxCharsInLine - 3) + "...";
                    }
                    else
                    {
                        line = line + "...";
                    }                    
                    isWraped = true;
                }

                result += line;
                break;
            }
            else
            {
                result += Trim(match[0]) + "<br/>";                                
            }
            i++;
        }
        control.innerHTML = result;
    }
    
    if(isWraped)
    {
        control.title = textToWrap;
    }
    
}

//add row to drop down list
function addOptionToDropDownList(combo, optionText, optionValue)
{
    var opt = document.createElement('option');          
    
    opt.text = optionText;
    opt.value = optionValue;     
    
    try {
        combo.add(opt, null); // standards compliant; doesn't work in IE
    }
    catch(ex) {
        combo.add(opt); // IE only
    } 
}

function getFileNameFromPath(path)
{
    var lastIndexOfSlash = path.lastIndexOf('/');
        
    var fileName = path.substring(lastIndexOfSlash+1, path.length);            
    
    return fileName;
}

function isNavigatorIE6()
{
    result = false;
    if (window.navigator.appName == "Microsoft Internet Explorer" && 
        window.navigator.appVersion.indexOf("MSIE 6.0") > -1)
    {
        result = true;
    }
    return result;
}

function copyToClipboard(textBox)
{
    textBox.select();
    
    if(window.clipboardData)
    {
    	window.clipboardData.setData('text',textBox.value);
    }
    else
    {
	    var flashId = 'flashId-HKxmj5';
     	    
	    var clipboardSWF = 'http://appengine.bravo9.com/copy-into-clipboard/clipboard.swf';
     
	    if (!document.getElementById(flashId)) {
		    var div = document.createElement('div');
		    div.id = flashId;
		    document.body.appendChild(div);
	    }
     
	    document.getElementById(flashId).innerHTML = '';
	    var content = '<embed src="' +
	    clipboardSWF +
	    '" FlashVars="clipboard=' + encodeURIComponent(textBox.value) +
	    '" width="0" height="0" type="application/x-shockwave-flash"></embed>';
     
	    document.getElementById(flashId).innerHTML = content;
    }
}
function ControlLinksContainer(divContainerName) {
	var divContainer = $(divContainerName);
	if (divContainer.hasClass('visible'))
		divContainer.removeClass('visible').addClass('invisible');
	else
		divContainer.removeClass('invisible').addClass('visible');
}
function roundNumber(num, dec) {
	var result = Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
	return result;
}