var autoCompleteData = null;
var toolTipsVisible = false;
/*
 * this function returns the height of the page
 * @method getPageSizeWithScroll
 * @return int height
 */


function getPageSizeWithScroll()
{
	if (window.innerHeight && window.scrollMaxY) {// Firefox
		yWithScroll = window.innerHeight + window.scrollMaxY;
		xWithScroll = window.innerWidth + window.scrollMaxX;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		yWithScroll = document.body.scrollHeight;
		xWithScroll = document.body.scrollWidth;
	} else { // works in Explorer 6 Strict, Mozilla (not FF) and Safari
		yWithScroll = document.body.offsetHeight;
		xWithScroll = document.body.offsetWidth;
  	}
	//arrayPageSizeWithScroll = new Array(xWithScroll,yWithScroll);
	//alert( 'The height is ' + yWithScroll + ' and the width is ' + xWithScroll );
    return yWithScroll;

}
/*
 * this function disable the window and user interaction
 * @method disableWindowForRequest
 */
function disableWindowForRequest()
{
    var divHeight=getPageSizeWithScroll();
    document.getElementById('disableWindowDiv').className="disableAllVisible";
    document.getElementById('disableWindowDiv').style.height=divHeight+"px";
    document.getElementById('loadingRrequestDiv').className="loadingOnRequest";

}

/*
 * this function enable the window and user interaction
 * @method enableWindowForRequest
 */
function enableWindowForRequest()
{
    document.getElementById('disableWindowDiv').style.height="0px";
    document.getElementById('disableWindowDiv').className="disableAllHidden";
    document.getElementById('loadingRrequestDiv').className="disableAllHidden";

}

	var globalOptions=null;

	/*
	 * this function highlight a text or item for a certain time
	 * @method updateTips
	 * @param htmlobject objid this contains the highlighted text
	 * @param text content this is text which need to be highlighted
	 */
    function updateTips(objid,content)
    {
        $("#"+objid).html(content).effect("highlight",{},3000);
    }

	/*
	 * this function check the number of characters of an input string and invoke the highlight function if the input is empty
	 * @method checkLength
	 * @param htmlobject objid  this contains the highlighted text
	 * @param text objname  greet name of the object
	 * @param htmlobject infodiv  container of highlighted text
	 */
    function checkLength(objid,objname,infodiv)
    {
        var obj=$("#"+objid);
        if ( obj.val().length <1 ) {
            obj.addClass('ui-state-error');
            if(infodiv!=null)
            {
                updateTips(infodiv,objname+" should not be empty.");
            }
            return false;
        } else {
            return true;
        }
    }



	/*
	 * this function invoke the jquery modal dialog
	 * @method startModalDialog
	 * @param text divId  the the div id which contains the modal dialog's html
	 * @param int conheight  height of the modal dialog
	 * @param int conwidth  width of the modal dialog, default=300
	 * @param text dtitle  title of the modal dialog, default=''
	 * @param text okButton  defines which type of button will be added, default= null
	 * @param object param  specific value to be operated, default=null
	 * @param text error  if any error occured, then the error message, default=''
	 */
    function startModalDialog(divId,conheight,conwidth,dtitle,okButton,param,error)
    {
        if(!conheight)
        {
           var conheight = null;
        }
        if(!conwidth)
        {
           var conwidth = 300;
        }
        var uButton=null;



        //$(this).dialog('close');
        switch(okButton)
        {
            case 1:
                uButton={ "Ok": function() {closeModalDialog(divId); } };
                break;
			case 2:
                uButton={ "Cancel": function() {cancelAllFileUpload();} };
                break;
            case 'cancel':
                uButton={"Cancel": function() {closeModalDialog(divId);}};
                break;
            case 'checkpw':
                $("#validateTips").text("");
                $("#passDialogDivText").html("<p>Please verify that you are indeed "+param+".</p>");
                $("#uploadpasswordid").removeClass('ui-state-error');
				globalOptions={'item1':param,'item2':'uploadpasswordid','item3':'validateTips'};

                if(error!=null)
                {
                    updateTips(error.itemid,error.message);
                    //$("#passDialogDivText").text("");
                }
                uButton={
                            "Continue": function()
                            {
                                var options={'item1':param,'item2':'uploadpasswordid','item3':'validateTips'};
                                checkValidPassword(options);
                            },
                            "Cancel": function() {closeModalDialog(divId);}
                        };
                break;
            case 'inactiveuser':
            $("#"+divId).html("<p>Hi "+param+"! "+document.getElementById('inactiveuserModalDialog').innerHTML+"</p>");
                uButton={
                            "Continue": function()
                            {
                                closeModalDialog(divId);
                                upload();
                            },
                            "Cancel sending": function() {closeModalDialog(divId);}
                        };
                 break;
            default:
                uButton=null;
                break;
        }




        $('#'+divId).dialog({
            bgiframe: true,
            width:conwidth,
            modal: true,
            closeOnEscape: false,
            hide: 'slide',
            zIndex: 50000,
            resizable: false,
			//autoOpen: false,
            title:dtitle,
            buttons: uButton//{ "Ok": function() { $(this).dialog("close"); } }
            //close: function(event, ui) { alert('closed');}

        });
    }


	/*
	 * this function close the modal dialog
	 * @method closeModalDialog
	 * @param text divId  this id used to restore the default text of modal dialog's used div
	 */
    function closeModalDialog(divId)
    {
        $("#passDialogDivText").text("Please verify that you are indeed ");
        switch(divId)
        {
            case 'commonModalDialogDiv':
                $("#commonModalDialogDiv").html("<p>Please wait...</p>");
                break;
            case 'modalDialogDiv':
                $("#modalDialogDiv").html("<p>In progress...</p><p style='text-align:center;'><img src='images/loading.gif' border='0' alt='' /></p>");
                break;
            default:
                break;
        }
        $('#'+divId).dialog("destroy");
    }

	/*
	 * this function detect if "Enter" key is pressed in modal dialog and invoke the necessary action
	 * @method ifpressedenter
	 * @param event event
	 */
	function ifpressedenter(event)
	{
		if(event.keyCode==13)
		{
			checkValidPassword(globalOptions);
		}
	}





/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////  proDialog.js   ///////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


      /// creating simple please wait dialog or alert
      var proModalDialog = function( config )
      {
          //debugger;
           ///default dialog option
           this.pleaseDialogOption = {
                    bgiframe: true,
                    autoOpen: false,
                    height: 'auto',
                    width : 'auto',
                    position :"center",
                    modal: true,
                    resizable: false,
                    zIndex : 500,
                    draggable : false,
                    closeOnEscape : false
            };

            //create the dialog condided div
            this.dialogCandidedDiv = document.createElement("div");
            document.body.appendChild( this.dialogCandidedDiv );

            // add extra option or override default if provide
            // config is key/value pair object
           if( config != null )
             {
                 if( typeof config == "object" )
                 {
                  for( var j in config )
                     {
                         this.pleaseDialogOption[j] = config[j];
                     }
                 }
                 else
                 {
                     alert(" Config should be key/value pair object");
                 }
             }

            //this.proDialog = $("#feedbackModalDialogDiv").dialog( this.pleaseDialogOption );
            this.proDialog = $( this.dialogCandidedDiv ).dialog( this.pleaseDialogOption );

            /// change dialog option
            //optionConfig is key/value pair object
            this.setOption = function( optionConfig )
            {
                for( var i in optionConfig )
                this.proDialog.dialog("option", i, optionConfig[i]);
            }

            // setTitle of the dialog
            this.setTitle = function( title )
            {
               // $("#feedbackModalDialogDiv").attr("title",title);
               this.proDialog.dialog("option", "title", title);
            }
            //set body of the dialog
            //body: plain text| html
            this.setBody = function( body )
            {
                $( this.dialogCandidedDiv ).html( body );
            }

            this.close = function()
            {
               this.proDialog.dialog("close");
            }

            this.open = function()
            {
               this.proDialog.dialog("open");
            }

            this.destroy = function()
            {
                this.proDialog.dialog("destroy");
            }
            this.setClassName = function( className)
            {
                $( this.dialogCandidedDiv ).attr("class",className);
            }

      }



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////    feedback.js     ///////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



//dialog option for feedback
   var feedbackDialogOption = {
			bgiframe: true,
			autoOpen: false,
			height:400,
            width :400,
            position :"center",
			modal: true,
            resizable: false,
            zIndex : 500,
            closeOnEscape : false,
            buttons: {'Cancel':feedbackCancel,"Submit":feedbackSubmit}

   };

   var myFeedbackDialog = null;
   var modalPleaseWaitDialog = null;
   var modalAlertDialog = null;
   $(document).ready(
                       function()
                       {
                         myFeedbackDialog = $("#feedForm").dialog( feedbackDialogOption );
                         //pleaseWaitDialog = $("#feedbackModalDialogDiv").dialog(pleaseDialogOption);
                         modalPleaseWaitDialog = new proModalDialog();

                         modalAlertDialog = new proModalDialog(
                                   {

                                     buttons:{
                                               "Ok": function()
                                               {

                                                 modalAlertDialog.close();
                                               }
                                              }



                                    });
                           $(".feedback_link").click(
                                                     function ()
                                                      {
                                                          displayFeedbackForm();
                                                      }
                                                    );
                           }

                     );



      // display feedback dialog
      function displayFeedbackForm()
      {
          $("input[name='subject']").val("");
          $("textarea[name='message']").val("");
          $("input#feedback_email").val("");
          $("select[name='type']").val("")


          myFeedbackDialog.dialog('open');

      }
      //feedback dialog cancel button action
      function feedbackCancel()
      {
         myFeedbackDialog.dialog('close');
      }
      // feedback dialog submit button action
      function feedbackSubmit()
      {

         var subject = $("input[name='subject']").val();
         var message = $("textarea[name='message']").val();
         var email = $("input#feedback_email").val();
         var type = $("select[name='type']").val();
         var flag = true;
         var errorMessage = "";

         if( subject == null || subject == "")
         {
            flag = false;
            errorMessage = " subject can not be empty";
         }

         else if( message == null || message == "")
         {
           flag = false;
           errorMessage = " message can not be empty";
         }

         if(flag)
         {    $.post("ajax/feedback.php",
                     {
                         subject:subject,
                         details:message,
                         email:email,
                         type:type
                     },
                     feedBackResponse
                   );
              myFeedbackDialog.dialog('close');
              modalPleaseWaitDialog.setBody('<p><img src="images/loading.gif"></p>');
              modalPleaseWaitDialog.setTitle("Please wait...");
              modalPleaseWaitDialog.open();

         }
         else
         {
             modalAlertDialog.setTitle("Error");
             modalAlertDialog.setBody(errorMessage);

             modalAlertDialog.setOption(
                                    {

                                     buttons:{
                                               "Ok": function()
                                               {

                                                 modalAlertDialog.close();
                                                 myFeedbackDialog.dialog('close');
                                                 myFeedbackDialog.dialog('open');
                                               }
                                              }



                                    }
            );
             modalAlertDialog.open();
         }
      }
      function feedBackResponse(data)
      {
          //debugger;

          try
          {
            //pleaseWaitDialog.dialog('close');
            modalPleaseWaitDialog.close();
            var response = eval('('+ data + ")" );

//            modalDialog.setOption(
//                                   {
//                                     buttons:{
//                                               "Ok": function()
//                                               {
//                                                 modalDialog.setOption({buttons:{}})
//                                                 modalDialog.close();
//                                               }
//                                              }
//
//                                    }
//                                 );


            if( response.status == 'success')
            {
                //debugger;
                modalAlertDialog.setTitle(" Feedback successfull");
                modalAlertDialog.setBody(" Thank you for your feedback.");
            }
            else
            {
                modalAlertDialog.setTitle(" Feedback failed");
                modalAlertDialog.setBody(" Sorry your feedback sending failed. May be there is a server error. ");

            }
            modalAlertDialog.setOption(
                                  {

                                     buttons:{
                                               "Ok": function()
                                               {

                                                 modalAlertDialog.close();
                                               }
                                              }



                                    }
             );
            modalAlertDialog.open();

          }
          catch(e)
          {
              alert(e.message);
          }

      }






	function validateChangepassForm()
	{
        var oldpassInfoDiv=document.getElementById('oldpassInfoDiv');
        var newpassInfoDiv=document.getElementById('newpassInfoDiv');
        var newconpassInfoDiv=document.getElementById('newconpassInfoDiv');
        var changepassInfoDiv=document.getElementById('changepassInfoDiv');

        oldpassInfoDiv.className="";
        oldpassInfoDiv.innerHTML="";

        newpassInfoDiv.className="";
        newpassInfoDiv.innerHTML="";

        newconpassInfoDiv.className="";
        newconpassInfoDiv.innerHTML="";

        changepassInfoDiv.className="";
        changepassInfoDiv.innerHTML="";

		if(document.userChangepassForm.oldpassword.value=='')
		{

			setChangepassStatus(oldpassInfoDiv,'blank');
		}
        else if(document.userChangepassForm.newpassword.value=='')
		{

			setChangepassStatus(newpassInfoDiv,'blank');
		}
        else if(document.userChangepassForm.newpassword.value!=document.userChangepassForm.newconpassword.value)
		{

			setChangepassStatus(newconpassInfoDiv,'nomatchcon');
		}
        else
        {
            saveChangepassForm();
        }

		return false;
	}
    function setChangepassStatus(divId,type)
    {
        if(type.match("blank"))
        {
            divId.className="regi_info";
            divId.innerHTML="Password should not be empty.";
        }
        else if(type.match("nomatchcon"))
        {

            divId.className="regi_info";
            divId.innerHTML="Confirm password does not match.";
        }
        else if(type.match("invalid"))
        {

            divId.className="regi_info";
            divId.innerHTML="Invalid old password.";
        }
    }

    function saveChangepassForm()
    {
         disableWindowForRequest();
         var oldpassword=document.userChangepassForm.oldpassword.value;
         var newpassword=document.userChangepassForm.newpassword.value;
         var newconpassword=document.userChangepassForm.newconpassword.value;
         var userid=document.userChangepassForm.userid.value;

         var oldpassInfoDiv=document.getElementById('oldpassInfoDiv');
         var newpassInfoDiv=document.getElementById('newpassInfoDiv');
         var newconpassInfoDiv=document.getElementById('newconpassInfoDiv');
         var changepassInfoDiv=document.getElementById('changepassInfoDiv');

         var options={"oldpassword":oldpassword,"newpassword":newpassword,"newconpassword":newconpassword, "userid":userid};

         $.post("ajax/changepass.php", options,
          function(data){

          enableWindowForRequest();
          //0=not matched; 1=matched
          //alert(data);
          var statusObj=eval("(" +data + ")");
            if(statusObj.status.match('success'))
            {
                //alert(data);
                //setChangepassStatus(changepassInfoDiv,'success');
                location.replace('index.php?page=confirmation&act=changepass&status=success');
            }
            else if(statusObj.status.match('failed'))
            {   //not found in db

                if(statusObj.cause.match('error'))
                {
                    setChangepassStatus(changepassInfoDiv,'error');
                }
                else if(statusObj.cause.match('invalid'))
                {
                    setChangepassStatus(oldpassInfoDiv,'invalid');
                }
                else if(statusObj.cause.match('nomatch'))
                {
                    setChangepassStatus(newconpassInfoDiv,'nomatch');
                }
                else if(statusObj.cause.match('oldblank'))
                {
                    setChangepassStatus(oldpassInfoDiv,'blank');
                }
                else if(statusObj.cause.match('newblank'))
                {
                    setChangepassStatus(newpassInfoDiv,'blank');
                }
            }
          });
    }





function validateRecieverEmail(recieverEmail)
{
    var returnFlag=true;

    var recieverArray=new Array();
    recieverArray=recieverEmail.split(',');

    for(i=0;i<recieverArray.length;i++)
    {
        if(!validateEmail(recieverArray[i]) && trim(recieverArray[i])!="")
        {
            returnFlag=false;
            break;
        }
    }

    return returnFlag;
}


function validateEmail(email)
{
    if(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(trim(email)))
    {
        return true;
    }
	else if(/^("\s*(\w+\s*)+"\s*)?<\s*\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})\s*>+$/.test(trim(email)))
    {
        return true;
    }
	else if(/^('\s*(\w+\s*)+'\s*)?<\s*\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})\s*>+$/.test(trim(email)))
    {
        return true;
    }
    return false;
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}




function buildUserContactListForBrowser(email_sender)
{
	var options = {'email':email_sender};
	$.post("../ajax/returnContactList.php", options, function(data){
		//alert(data);
		var status = eval("(" +data + ")");
		if(status.code == '1')
		{
			//alert(status.data);
			var contactData = eval("("+status.data+")");
			parent.initAddressBookManager(contactData);
			parent.generateAutoComplete($("input[name = 'tofields']"));
			//debugger;
		}
		else
		{
			//alert(status.message);
		}
	  });
}

function buildUserContactList(email_sender)
{
	var options = {'email':email_sender};
	$.post("ajax/returnContactList.php", options, function(data){
		//alert(data);
		var status = eval("(" +data + ")");
		if(status.code == '1')
		{
			//alert(status.data);
			var contactData = eval("("+status.data+")");
			initAddressBookManager(contactData);
			generateAutoComplete($("#email_reciever_id"));
			//debugger;
		}
		else
		{
			//alert(status.message);
		}
	  });
}






function generateAutoComplete(inputObj)
{
	autoCompleteData = new Array();
	var conatctText = '';
	var contactList = '';
	if(inputObj == null)
	{
		return;
	}

	if(addressBookManager == null)
	{
		if(parent.addressBookManager == null)
		{
			return;
		}
		else
		{
			var addressBookManager = parent.addressBookManager;
		}

	}

	

	for( var contact in addressBookManager.contactManager.contactCollection )
	{
		autoCompleteData.push({text:addressBookManager.contactManager.contactCollection[contact].email, type:"contact",name:addressBookManager.contactManager.contactCollection[contact].contactName});
	}

	for( var group in addressBookManager.groupManager.groupCollection )
	{
		autoCompleteData.push({ text:addressBookManager.groupManager.groupCollection[group].name, type:"group", groupId:addressBookManager.groupManager.groupCollection[group].groupId });
	}

	//$("#email_reciever_id").autocomplete( autoCompleteData,
	inputObj.autocomplete( autoCompleteData,
	  {
		  multiple: true,
		  matchContains:true,
		  //multipleSeparator: ", ",
		  //highlight:true,
		  //autoFill:true,
		  formatItem: function( item )
		  {
			  if( item.type == "contact" )
			  {
					if(item.name!='' && item.name!=null)
					{
						return '"'+item.name + '"&lt;'+ item.text + '&gt;';
					}
					else
					{
						return item.text;
					}					
			  }
			  else
			  {
					 return item.text + "( group )";
			  }
		  }
	  }
	);


	 inputObj.result(
		  function( event, item, formatted )
		  {
			  var tempArray = new Array();
			  var conatctTempText = "";
			  conatctText = "";
			  //inputObj.val("");
			  //debugger;
			  //conatctText = inputObj.val();
			   conatctTempText = event.currentTarget.value;
			   tempArray = conatctTempText.split(',');

			   if(tempArray.length>2)
				{
					for(i=0; i < tempArray.length-2; i++)
					{
						conatctText += tempArray[i]+", ";
					}
				}

			  if( item.type == "contact" )
			  {
				  if(item.name!='' && item.name!=null)
				  {
					  conatctText += '"'+item.name + '"<'+ item.text + '>, ';
				  }
				  else
				  {
					  conatctText += item.text + ", ";
				  }
				  inputObj.val(conatctText);
				  //inputObj.val( item.text );
			  }
			  else
			  {
				  var contacts = addressBookManager.groupManager.groupCollection[ item.groupId ].contacts;
				  //debugger;

				  for( var con in contacts )
				  {
					  if(addressBookManager.contactManager.contactCollection[ contacts[ con ] ].contactName!='' && addressBookManager.contactManager.contactCollection[ contacts[ con ] ].contactName!=null)
					  {
						  conatctText += '"'+addressBookManager.contactManager.contactCollection[ contacts[ con ] ].contactName + '"<'+
									 addressBookManager.contactManager.contactCollection[ contacts[ con ] ].email + '>, ';
					  }
					  else
					  {
						  conatctText += addressBookManager.contactManager.contactCollection[ contacts[ con ] ].email + ", ";
					  }

				  }

				  inputObj.val( conatctText );
			  }
		  }
	  );
		  
}





function showToolTips( event, element)
{
  //debugger;
  var tooltipsText = $( element ).attr( "toolTipText" );
  var height = $( element ).height();

		 var left = $(element).offset().left + $( element ).width() ;
		 var top = $(element).offset().top - ( height  );
		 $("div.tooltip").css("top", top+"px");
		 $("div.tooltip").css("left", left+"px");
		 $("div.tooltip").html( tooltipsText );
		 $("div.tooltip").show();
	//}
}
function hideToolTips()
{
  $("div.tooltip").hide();
   //toolTipsVisible = false;
}



/*function generateAutoCompleteForBrowser()
{
	 //alert("generateAutoComplete");
	 autoCompleteData = new Array();

	 var toInputObj = $("input[name = 'tofields']");
	 //var toInputObj = simple.findField( 'tofields');
	 var addressBookManager = parent.addressBookManager;
	//debugger;
	for( var contact in addressBookManager.contactManager.contactCollection )
	{
		autoCompleteData.push({text:addressBookManager.contactManager.contactCollection[contact].email, type:"contact"});
	}

	for( var group in addressBookManager.groupManager.groupCollection )
	{
		autoCompleteData.push({ text:addressBookManager.groupManager.groupCollection[group].name, type:"group", groupId:addressBookManager.groupManager.groupCollection[group].groupId });
	}

	  toInputObj.autocomplete( autoCompleteData,
	  {
		  multiple: true,
		  //autoFill:true,
		  formatItem: function( item )
		  {

			  if( item.type == "contact" )
			  {
					return item.text;
			  }
			  else
			  {
					 return item.text + "( group )";
			  }
		  }
	  }
	);


	toInputObj.result(
		  function( event, item, formatted )
		  {
			  toInputObj.val("");

			  if( item.type == "contact" )
			  {
				  toInputObj.val( item.text );
			  }
			  else
			  {
				  var contacts = addressBookManager.groupManager.groupCollection[ item.groupId ].contacts;
				  //debugger;
				  var contactList = "";
				  for( var con in contacts )
				  {
					  contactList += '"'+addressBookManager.contactManager.contactCollection[ contacts[ con ] ].contactName + '"<'+
									 addressBookManager.contactManager.contactCollection[ contacts[ con ] ].email + '>, ';
					 //contactList += addressBookManager.contactManager.contactCollection[ contacts[ con ] ].email + ", ";
				  }

				  toInputObj.val( contactList );
			  }
		  }
	  );
}*/