// FUNCTIONS FOR PURE COOKIE MANIPULATION

// configuration area

var listObjArr = new Array();
var cookieDuration = 12; // months !!! changed to session duration
var cookieValSeparator = "~";
var cookieKiller = 12; // months
var cookieSplitter = "; ";
var cookie_NameList_sep = "&";
var cookiePath = "/";
var maxItemNo = 999000;

// end configuration area

// functions area

function addValToCookieList(listType,itemId) { // adds new item id to list and creates one if doesn't exist
 //var expireAt = new Date;
 //expireAt.setMonth(expireAt.getMonth() + cookieDuration);
 //document.cookie = listType + "=" + escape(mergeCookieVal(getCookieVals(listType),itemId)) + ";expires=" + expireAt.toGMTString() + ";path=" + cookiePath;
 document.cookie = listType + "=" + escape(mergeCookieVal(getCookieVals(listType),itemId)) + ";path=" + cookiePath;
}

function mergeCookieVal(cookieValues,itemId) { // merges new item id with it's list and old item id values
  if (cookieValues.indexOf(itemId) == -1)
               return (cookieValues + getCookiePrefix(cookieValues,1,itemId) + itemId);
  else return cookieValues;
}

function getCookiePrefix(cookieValStr,action,itemId) { //adds or removes cookie separator before item id if necessery
  cookieValPrefix = cookieValSeparator;
    if(cookieValStr.indexOf(cookieValSeparator) == -1 && action == 2)
               cookieValPrefix = "";
    else if(action == 1 && cookieValStr.length == 0)
               cookieValPrefix = "";
    else if(action == 2 && cookieValStr.indexOf(itemId) == 0 && cookieValStr.indexOf(cookieValSeparator) != -1)
               cookieValPrefix = "";
  return cookieValPrefix;
}

function getCookieSuffix(cookieValStr,action,itemId) { //adds or removes cookie separator after item id if necessery 
 var cookieValSuffix = "";
  if(action == 2 && cookieValStr.indexOf(itemId) == 0 && cookieValStr.indexOf(cookieValSeparator) != -1)
               cookieValSuffix = cookieValSeparator;
 return cookieValSuffix;
}

function getCookieVals(listType,listName) { //returns cookie value for desired list with all item ids
 if(listName)
  listType = listType + cookie_NameList_sep + listName;
 if(!document.cookie) return "";
 
 var cookieVal, cookieKey;
 var cookieArr = document.cookie.split(cookieSplitter);
   for(var i=0;i<cookieArr.length;i++) {
     if(cookieArr[i].indexOf("=") != -1) {
       cookieKey = unescape(cookieArr[i].split("=")[0]);
       cookieVal = cookieArr[i].split("=")[1];
         if(cookieKey == listType)
                   return (unescape(cookieVal));
     }
   }
  return "";
}

function deleteCookieVal(listType,itemId) { // deletes item id from desired list
 if(!document.cookie) return;
 
 var cookieValStr, tmpCookieValStr;
 cookieValStr = getCookieVals(listType);
 var expireAt = new Date;
 expireAt.setMonth(expireAt.getMonth() + cookieDuration);
 tmpCookieValStr = cookieValStr.replace(getCookiePrefix(cookieValStr,2,itemId)+itemId+getCookieSuffix(cookieValStr,2,itemId),"");
  if(tmpCookieValStr && tmpCookieValStr != "")
      tmpCookieValStr = escape(tmpCookieValStr);
 //document.cookie = listType + "=" + tmpCookieValStr + ";expires=" + expireAt.toGMTString() + ";path=" + cookiePath;
 document.cookie = listType + "=" + tmpCookieValStr + ";path=" + cookiePath;
}

function addItemDataCookie(listName,itemId,itemDesc,itemPrice,itemQuantity,itemDetailPage) { // adds separate cookie that holds separate price and desc information for item id
 var decodedCookieVal
 var finalItemQuantity = itemQuantity;
 if(!itemQuantity)
    itemQuantity = "1";
 var expireAt = new Date;
 expireAt.setMonth(expireAt.getMonth() + cookieDuration);
 decodedCookieVal = unescape(getCookieVals(itemId,listName));
 var currentItemNo = parseInt(decodedCookieVal.split(cookieValSeparator)[2]);
  if(currentItemNo && currentItemNo != "" && currentItemNo != 0)
    finalItemQuantity = parseInt(currentItemNo) + parseInt(itemQuantity);
    
 var cookieStr = escape(itemId + cookie_NameList_sep + listName) + "=";
 cookieStr += escape(itemDesc + cookieValSeparator + itemPrice + cookieValSeparator + finalItemQuantity + cookieValSeparator + itemDetailPage);
 //cookieStr += ";expires=" + expireAt.toGMTString() + ";path=" + cookiePath;
 cookieStr += ";path=" + cookiePath;
 //alert(cookieStr);
 document.cookie = cookieStr;
}

function deleteItemDataCookie(listName,itemId) { // deletes separate cookie that holds price and desc information for item id
 var cookieStr
 var expireAt = new Date;
 expireAt.setMonth(expireAt.getMonth() - cookieKiller);
 document.cookie = escape(itemId + cookie_NameList_sep + listName) + "=;expires=" + expireAt.toGMTString() + ";path=" + cookiePath;
}

function addItemToList(listname,itemid,itemname,itemprice,itemQuantity,itemDetailPage) {
  listObjArr[listname].addItem(itemid,itemname,itemprice,itemQuantity,itemDetailPage);
  hideListDiv();
}

function opener_addItemToList(listname,itemid,itemname,itemprice,itemQuantity,itemDetailPage) {
  top.opener.listObjArr[listname].addItem(itemid,itemname,itemprice,itemQuantity,itemDetailPage);
  top.close()
}

function old_checkQuantity() {
 var itemNo = document.itemQuantityForm.itemQuantity.value;
  if(!itemNo || itemNo < 0) itemNo = 1;
  
 if(itemNo > maxItemNo) {
  alert("Broj komada proizvoda koji ste unijeli nije dozvoljen!");
  hideListDiv();
  return;
 }
  
 listname = document.itemQuantityForm.listname.value;
 itemid = document.itemQuantityForm.itemid.value;
 itemname = document.itemQuantityForm.itemname.value;
 itemprice = document.itemQuantityForm.itemprice.value;
 itemDetailPage = document.itemQuantityForm.itemDetailPage.value;
 
 addItemToList(listname,itemid,itemname,itemprice,itemNo,itemDetailPage);
 hideListDiv();
}

function checkQuantity(add_from_win) {
 var itemNo = document.itemQuantityForm.itemQuantity.value;
  if(!itemNo || itemNo < 0) itemNo = 1;
  
 if(itemNo > maxItemNo) {
  alert("Broj komada proizvoda koji ste unijeli nije dozvoljen!");
  hideListDiv();
  return;
 }
  
 listname = document.itemQuantityForm.listname.value;
 itemid = document.itemQuantityForm.itemid.value;
 itemname = document.itemQuantityForm.itemname.value;
 itemprice = document.itemQuantityForm.itemprice.value;
 itemDetailPage = document.itemQuantityForm.itemDetailPage.value;
 
 if(add_from_win)
   opener_addItemToList(listname,itemid,itemname,itemprice,itemNo,itemDetailPage);
 else
   addItemToList(listname,itemid,itemname,itemprice,itemNo,itemDetailPage);
   
 hideListDiv();
}

function firstAddQuantity(listname,itemid,itemname,itemprice,itemQuantity,itemDetailPage) {
 document.itemQuantityForm.listname.value = listname;
 document.itemQuantityForm.itemid.value = itemid;
 document.itemQuantityForm.itemname.value = itemname;
 document.itemQuantityForm.itemprice.value = itemprice;
 document.itemQuantityForm.itemQuantity.value = itemQuantity;
 document.itemQuantityForm.itemDetailPage.value = itemDetailPage;
 
 var targetObj = document.getElementById(listname + "_obj");
 var targetObjHeight = parseInt(document.images['basket_img'].height);
 var basket_quantity_div = document.getElementById("itemQuantity");
 var leftDist = 0;
 var topDist = 0;

 while (targetObj.tagName != "BODY") {
  leftDist += targetObj.offsetLeft;
  topDist += targetObj.offsetTop;
  targetObj = targetObj.offsetParent;
 }
 
 document.getElementById("itemQuantity").style.top = topDist + targetObjHeight;
 document.getElementById("itemQuantity").style.left = leftDist;
 document.getElementById("itemQuantity").style.display = "";
}

function hideListDiv() {
 for(var i=0;i<listDivArr.length;i++) {
   listDivArr[i].style.display = "none";
 }
}

function initLists() {
  listObjArr['basket'] = new Visual_list('basket');
  listObjArr['basket'].writeItemList();
}

/// end functions area